/*
 *
 * Copyright (c) 2007, LilyStudio Nanjing University.
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *  * Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *  * Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *  * Neither the name of LilyStudio Nanjing University nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
package org.lilystudio.veryftp.action;

import java.util.HashMap;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.lilystudio.veryftp.service.VeryftpService;

/**
 * 
 * @author Samson
 * @author Goodtiger
 * @version 2006-9-3 19:50:59
 * 
 */
public abstract class VeryftpBaseAction extends Action {
	private static Log log = LogFactory.getLog(VeryftpBaseAction.class);

	/* all the dao can be got from VeryftpService */
	protected VeryftpService veryftpService;
	
	protected HttpSession session;

	/*
	 * contains information to be passed to the web tie
	 */
	@SuppressWarnings("unchecked")
	protected HashMap information = new HashMap();

	/**
	 * If you want to pass something to the web tie,use this method.
	 * 
	 * @param key
	 * @param value
	 */
	@SuppressWarnings("unchecked")
	protected void addInformation(Object key, Object value) {
		this.information.put(key, value);
	}

	/**
	 * @return Returns the information.
	 */
	@SuppressWarnings("unchecked")
	public HashMap getInformation() {
		return information;
	}

	/**
	 * 
	 * @param name
	 * @param value
	 */
	public void setSessionAttribute(String name, Object value) {
		this.session.setAttribute(name, value);
	}

	public Object getSessionAttribute(String name) {
		return this.session.getAttribute(name);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see org.apache.struts.action.Action#execute(org.apache.struts.action.ActionMapping,
	 *      org.apache.struts.action.ActionForm,
	 *      javax.servlet.http.HttpServletRequest,
	 *      javax.servlet.http.HttpServletResponse)
	 */
	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		this.session = request.getSession();
		log.info("Action Instance : " + this);
		log.info("Session Instance : " + this.session);
		request.setAttribute("information", information);
		return executeAction(mapping, form, request, response);
	}

	/**
	 * @param mapping
	 * @param form
	 * @param request
	 * @param response
	 * @return
	 */
	protected abstract ActionForward executeAction(ActionMapping mapping,
			ActionForm form, HttpServletRequest request,
			HttpServletResponse response) throws Exception;

	/**
	 * @return Returns the veryftpService.
	 */
	public VeryftpService getVeryftpService() {
		log.info("Retrieve VeryftpService instance.");
		return veryftpService;
	}

	/**
	 * @param veryftpService
	 *            The veryftpService to set.
	 */
	public void setVeryftpService(VeryftpService veryftpService) {
		log.info("Instantiate VeryftpService.");
		this.veryftpService = veryftpService;
	}

}
